package com.bw.produce.mapper;

import com.bw.produce.domain.Classify;
import com.bw.produce.domain.ClassifyTypeMid;
import com.bw.produce.domain.dto.ClassifyDTO;
import com.bw.produce.domain.vo.ClassifySelectVO;
import com.bw.produce.domain.vo.ClassifyVO;
import com.bw.produce.query.ClassifyQueryObject;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author lemon
 * @date 2024/11/14 22:23
 **/
@Mapper
public interface ClassifyMapper {

    /**
     * 通过品牌名称查询
     * @param classifyName 品牌名称
     * @return 是否存在
     */
    int selectByClassifyName(String classifyName);

    /**
     * 插入数据
     * @param classify 品牌信息
     * @return sql影响条数
     */
    int insert(Classify classify);

    /**
     * 修改数据
     * @param classify 品牌信息
     * @return sql影响条数
     */
    int update(Classify classify);

    /**
     * 通过id删除
     * @param classifyId 品牌id
     * @return sql影响条数
     */
    int deleteById(Long classifyId);

    /**
     * 通过第查询
     * @param classifyId 品牌id
     * @return 是否存在
     */
    int selectById(Long classifyId);

    /**
     * 通过id获取详细信息
     * @param classifyId 分类id
     * @return 信息
     */
    ClassifyVO selectInfo(Long classifyId);

    /**
     * 通过品牌id删除
     * @param classifyId 品牌id
     */
    void deleteByIds(@Param("classifyId") Long[] classifyId);


    /**
     * 查询一级分类
     * @param queryParams 过滤参数
     * @return 分类集合
     */
    List<ClassifyVO> selectFirst(ClassifyQueryObject queryParams);

    /**
     * 查询二级分类
     * @param queryParams 过滤参数
     * @return 分类集合
     */
    List<ClassifyVO> selectSecond(ClassifyQueryObject queryParams);

    /**
     * 查询所有的一级分类
     * @return 分类集合
     */
    List<ClassifySelectVO> selectFirstClassify();

    /**
     * 保存分类对应的类型和属性
     * @param mid 分类和类型id
     */
    void saveRelation(ClassifyTypeMid mid);

    /**
     * 删除中间表关系
     * @param id 分类id
     */
    void deleteRelation(Long id);

    /**
     * 查询是否有子级分类
     * @param id 分类id
     * @return 数量
     */
    int selectChildren(Long id);

    /**
     * 修改导航栏
     * @param classifyId 分类id
     */
    void updateNavigation(Long classifyId);


    /**
     * 修改是否显示
     * @param classifyId 分类id
     */
    void updateReveal(Long classifyId);

}
